<?php

/**
 * Smarty plugin
 * @package Smarty
 * @subpackage plugins
 */

/**
 * load a resource plugin
 *
 * @param string $type
 */

// $type
function smarty_core_load_resource_plugin($params, &$smarty) {
	/*
	 * Resource plugins are not quite like the other ones, so they are handled differently. The first element of plugin info is the array of functions provided by the plugin, the second one indicates whether all of them exist or not.
	 */
	$_plugin = &$smarty->_plugins['resource'][$params['type']];
	if (isset($_plugin)) {
		if (!$_plugin[1] && count($_plugin[0])) {
			$_plugin[1] = true;
			foreach ($_plugin[0] as $_plugin_func) {
				if (!is_callable($_plugin_func)) {
					$_plugin[1] = false;
					break;
				}
			}
		}
		
		if (!$_plugin[1]) {
			$smarty->_trigger_fatal_error("[plugin] resource '" . $params['type'] . "' is not implemented", null, null, __FILE__, __LINE__);
		}
		
		return;
	}
	
	$_plugin_file = $smarty->_get_plugin_filepath('resource', $params['type']);
	$_found = ($_plugin_file != false);
	
	if ($_found) { /*
	                * If the plugin file is found, it -must- provide the properly named plugin functions.
	                */
		include_once ($_plugin_file);
		
		/*
		 * Locate functions that we require the plugin to provide.
		 */
		$_resource_ops = array(
				'source','timestamp','secure','trusted' 
		);
		$_resource_funcs = array();
		foreach ($_resource_ops as $_op) {
			$_plugin_func = 'smarty_resource_' . $params['type'] . '_' . $_op;
			if (!function_exists($_plugin_func)) {
				$smarty->_trigger_fatal_error("[plugin] function $_plugin_func() not found in $_plugin_file", null, null, __FILE__, __LINE__);
				return;
			} else {
				$_resource_funcs[] = $_plugin_func;
			}
		}
		
		$smarty->_plugins['resource'][$params['type']] = array(
				$_resource_funcs,true 
		);
	}
}

/* vim: set expandtab: */

?>
